<?php

namespace YouHuJun\YouHuTool\App\Utils\Timer;

use YouHuJun\YouHuTool\App\Utils\Timer\Task\Task;
/**
 * 高级定时器系统
 */
class Timer {
    private $tasks = [];
    private $isRunning = false;
    
    /**
     * 添加任务
     * @param string $name 任务名称
     * @param callable $callback 回调函数
     * @param int $interval 间隔时间（秒）
     */
    public function addTask($name, $callback, $interval) {
        $this->tasks[$name] = new Task($name, $callback, $interval);
    }
    
    /**
     * 移除任务
     * @param string $name 任务名称
     */
    public function removeTask($name) {
        if (isset($this->tasks[$name])) {
            unset($this->tasks[$name]);
        }
    }
    
    /**
     * 启动定时器系统
     */
    public function start() {
        $this->isRunning = true;
        
        while ($this->isRunning) {
            foreach ($this->tasks as $task) {
                if ($task->shouldRun()) {
                    try {
                        $task->execute();
                    } catch (Exception $e) {
                        error_log("Task {$task->getName()} failed: " . $e->getMessage());
                    }
                }
            }
            
            usleep(100000); // 休眠0.1秒
        }
    }
    
    /**
     * 停止定时器系统
     */
    public function stop() {
        $this->isRunning = false;
    }
}